// src/stores/auth.js
import { defineStore } from 'pinia'
import { ref } from 'vue'
import { login, getUserInfo, logout, updateUserProfile as updateProfile } from '../api/auth'

export const useAuthStore = defineStore('auth', () => {
  const isLoggedIn = ref(false)
  const user = ref(null)
  const loading = ref(false)

  // 初始化认证状态
  const initialize = async () => {
    const token = localStorage.getItem('token')
    if (token) {
      try {
        const userInfo = await getUserInfo()
        isLoggedIn.value = true
        user.value = userInfo.data
      } catch (error) {
        // token 失效，清除本地存储
        localStorage.removeItem('token')
        localStorage.removeItem('user')
      }
    }
  }

  // 异步登录方法 - 使用真实后端 API
  const loginUser = async (username, password) => {
    loading.value = true

    try {
      const response = await login({
        username: username,
        password: password
      })

      if (response.success) {
        isLoggedIn.value = true
        user.value = response.user

        // 保存 token 和用户信息到本地存储
        localStorage.setItem('token', response.user.token)
        localStorage.setItem('user', JSON.stringify(response.user))

        return { success: true }
      } else {
        return { success: false, error: response.error || '登录失败' }
      }
    } catch (error) {
      console.error('登录错误:', error)
      return {
        success: false,
        error: error.response?.data?.error || '网络错误，请稍后重试'
      }
    } finally {
      loading.value = false
    }
  }

  // 更新用户信息
  const updateUserProfile = async (profileData) => {
    loading.value = true
    try {
      const response = await updateProfile(profileData)
      if (response.success) {
        // 更新store中的用户信息（使用响应式方式，替换整个对象）
        if (user.value) {
          user.value = { ...user.value, ...response.data }
        } else {
          // 如果user.value为null，从响应数据创建新对象
          user.value = { ...response.data }
        }
        
        // 更新本地存储
        const userStr = localStorage.getItem('user')
        if (userStr) {
          const storedUser = JSON.parse(userStr)
          const updatedUser = { ...storedUser, ...response.data }
          localStorage.setItem('user', JSON.stringify(updatedUser))
        } else {
          // 如果本地存储中没有用户信息，保存响应数据
          localStorage.setItem('user', JSON.stringify(user.value))
        }
        
        console.log('✅ 用户信息已更新到store:', user.value)
        
        return { success: true, data: response.data, message: response.message }
      } else {
        return { success: false, error: response.error || '更新失败' }
      }
    } catch (error) {
      console.error('更新用户信息错误:', error)
      return {
        success: false,
        error: error.response?.data?.message || '网络错误，请稍后重试'
      }
    } finally {
      loading.value = false
    }
  }
  
  // 更新用户信息（直接更新，用于头像上传等场景）
  const updateUser = (userData) => {
    console.log('🔄 开始更新用户信息:', userData)
    console.log('📦 更新前的用户信息:', user.value)
    
    if (user.value) {
      // 使用对象展开确保响应式更新
      user.value = { ...user.value, ...userData }
    } else {
      user.value = { ...userData }
    }
    
    console.log('✅ 更新后的用户信息:', user.value)
    
    // 同步更新本地存储
    const userStr = localStorage.getItem('user')
    if (userStr) {
      const storedUser = JSON.parse(userStr)
      const updatedUser = { ...storedUser, ...userData }
      localStorage.setItem('user', JSON.stringify(updatedUser))
      console.log('💾 本地存储已更新')
    }
  }

  // 退出登录
  const logoutUser = async () => {
    try {
      await logout()
    } catch (error) {
      console.error('退出登录错误:', error)
    } finally {
      // 无论后端是否成功，都清除前端状态
      isLoggedIn.value = false
      user.value = null
      localStorage.removeItem('token')
      localStorage.removeItem('user')
    }
  }

  return {
    isLoggedIn,
    user,
    loading,
    initialize,
    login: loginUser,
    logout: logoutUser,
    updateUserProfile,
    updateUser
  }
})